import express from 'express';
import cors from 'cors';

const app = express();

app.use(cors());

app.use(express.json()) 

const answerList=[{
    q:'你好',
    an:'你好，我是你的智能助手，有什么可以帮助你的吗？'
},{
    q:'你是谁',
    an:'我是你的智能助手，有什么可以帮助你的吗？'
},{
    q:'中药学',
    an:`中药学源远流长，在中国传统医学的影响下，中药学逐渐形成并发展至今，在全球范围内都广受关注。随着现代科学技术的发展，中药学不断融合创新，拓展研究领域，因此，与时俱进的培养和输出中药学专业人才，不断推动中药产业的发展至关重要。\n
    中药学专业旨在培养具有坚定的理想信念和社会责任感，掌握中医药基础理论和药学服务技能的高素质技术技能人才。本校中药学专业的课程设置包括公共基础课程和专业（技能）课程两大部分。其中，公共基础课程涵盖思想政治理论、英语、信息技术等，培养学生的综合素养和社会责任感。专业课程涵盖了中药学领域的基础理论和核心技术，如中药化学技术、中药鉴定技术、中药制剂检测技术等，以及实践性教学环节，包括实验、实训、实习和社会实践等。教学方法注重理论与实践相结合，通过系统学习、实践操作和社会实践，培养学生的综合能力和创新意识，使其具备从事中药调剂、制剂生产、药学服务等工作的能力和素质。\n
    为保证教学目标的达成，中药学专业以师资队伍和教学设施建设为基础，强调“四有好老师”和教学设施的全面配备。教师队伍结构合理，包括专业带头人、专任教师和兼职教师，教学设施涵盖了专业教室、实验室、实训室等，配备先进的仪器设备，满足多种教学和实践需求，为学生提供良好的学习环境。此外，本专业优先选用国家规划教材，配备行业政策法规资料和新技术相关资源。教学方法灵活多样，注重实践能力培养，采用案例教学、任务教学等形式。学习评价突出能力考核，采用多元化评价方式，包括校内教师、企业和学生自我评价，重视实践操作能力，进一步保障教学质量。\n
    中药学专业致力于传承与创新，以综合素质培养为目标，注重理论与实践相结合，通过全面科学的教学体系和质量管理机制，为中药产业发展培养出具有社会责任感和创新意识的中药学专业人才，为人类健康事业作出更大贡献。`
},{
    q:'智慧树',
    an:`智慧树网是隶属于上海卓越睿新数码科技股份有限公司的全球大型学分课程运营服务平台。 智慧树网拥有海量大学高品质课程，并完美支持跨校授课、学分认证以及名师名课名校的资源共享。`
}]

function splitTextIntoPairs(text) {
    // 将文本按每两个字符分割成数组
    let result = [];
    for (let i = 0; i < text.length; i += 1) {
      // 使用substring方法截取两个字符
      let pair = text.substring(i, i + 1);
      result.push(pair);
    }
    return result;
  }

const eventStreams = new Map();
app.post('/question', (req, res) => {
    const { question } = req.body;
    const streamId = Date.now().toString();
    const answer = answerList.find(item => item.q === question);
    if (answer) {
        let answerArr = splitTextIntoPairs(answer.an);
        eventStreams.set(streamId, answerArr);
    } else {
        eventStreams.set(streamId, '抱歉，我无法回答这个问题');
    }
    res.status(200).json({ streamId });
})

app.get('/sse/:streamId', (req, res) => {
    const { streamId } = req.params;
    if (!eventStreams.has(streamId)) {
        return res.status(404).send('Stream not found');
    }

    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');

    // 模拟事件流数据发送
    const sendEvent = (data) => {
        res.write(`data: ${data}\n\n`);
    };
    let msg = eventStreams.get(streamId);
    let i = 0;
    let intervalId = setInterval(() => {
        sendEvent(msg[i]);
        if(i !== msg.length - 1) {
            i++
        } else {
            clearInterval(intervalId);
            eventStreams.delete(streamId);
            res.end();
        }
    }, 100)

    // 当客户端断开连接时清除定时器
    req.on('close', () => {
        console.log('Client disconnected');
        eventStreams.delete(streamId);
        res.end();
    });
})


app.listen(3000, () => {
    console.log('Server is running on port 3000');
})